package top.leinx.fxnotes.paint;

/**
 * @Author : xiaolei
 * @DateTime: 2021/3/27 10:19 下午
 */

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.FlowPane;
import javafx.scene.paint.Color;
import javafx.scene.paint.ImagePattern;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Polygon;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

import java.net.URISyntaxException;

public class ImagePatternExample extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws URISyntaxException {
        FlowPane pane = new FlowPane(5.0, 5.0);
        pane.setPadding(new Insets(5, 5, 5, 5));

        // 创建多个矩形
        Rectangle[] rectangles = new Rectangle[6];
        for (int i = 0; i < rectangles.length; i++) {
            rectangles[i] = new Rectangle(0, 0, 200, 200);
            rectangles[i].setStroke(Color.BLACK); // 黑色边框
        }

        Image image = new Image(getClass().getResource("ball.png").toURI().toString());
        // 按比例设置 x, y 从矩形左上角开始
        // 按比例设置 width, height 为矩形长、宽的100%
        rectangles[0].setFill(new ImagePattern(image, 0, 0, 1.0, 1.0, true));

        // 按比例设置 x, y 从矩形左上角开始
        // 按比例设置 width, height 为矩形长、宽的25%
        rectangles[1].setFill(new ImagePattern(image, 0, 0, 0.25, 0.25, true));

        // 按比例设置 x, y 距矩形左上角开始 x 和 y 方向均为 25%
        // 按比例设置 width, height 为矩形长、宽的50%
        rectangles[2].setFill(new ImagePattern(image, 0.25, 0.25, 0.5, 0.5, true));

        // 按像素设置 x, y 距矩形左上角开始 x 和 y 方向均为 0
        // 按像素设置 width 为 80, height 为 80
        rectangles[3].setFill(new ImagePattern(image, 0, 0, 80, 80, false));

        // 按像素设置 x, y 距矩形左上角开始 x 和 y 方向均为 40
        // 按像素设置 width 为 80, height 为 80
        rectangles[4].setFill(new ImagePattern(image, 40, 40, 80, 80, false));

        // 按像素设置 x, y 距矩形左上角开始 x 和 y 方向均为 0
        // 按像素设置 width 为 400, height 为 400，大于矩形的宽和高
        rectangles[5].setFill(new ImagePattern(image, 0, 0, 400, 400, false));

        // 填充圆
        Circle circle = new Circle(100.0);
        circle.setStroke(Color.BLACK);
        circle.setFill(new ImagePattern(image, 0, 0, 0.25, 0.25, true));

        // 填充多边形-三角形
        Polygon triangle = new Polygon(100.0, 0.0, 0.0, 200.0, 200.0, 200.0);
        triangle.setStroke(Color.BLACK);
        triangle.setFill(new ImagePattern(image, 0, 0, 0.25, 0.25, true));

        // 填充多边形-八边形
        Polygon octagon = new Polygon(
                200 / 3.0, 0, 400 / 3.0, 0,
                200, 200 / 3.0, 200, 400 / 3.0,
                400 / 3.0, 200, 200 / 3.0, 200,
                0, 400 / 3.0, 2, 200 / 3.0
        );
        octagon.setStroke(Color.BLACK);
        octagon.setFill(new ImagePattern(image, 0, 0, 0.25, 0.25, true));

        pane.getChildren().addAll(rectangles);
        pane.getChildren().add(circle);
        pane.getChildren().add(triangle);
        pane.getChildren().add(octagon);

        primaryStage.setTitle("Paint - ImagePattern 填充示例");
        primaryStage.setScene(new Scene(pane, 640, 640));
        primaryStage.show();
    }
}
